package cn.zqy.demo.day10.demo02;

/**
 * 多态中对象的向上转型
 *    格式： 父类名称 对象名 = new 子类名称();
 *    向上转型一定是安全的，从小范围转向了大范围。
 *    对象一旦向上转型为父类，那么就无法调用子类对象原有的内容。
 *
 *  解决方案：用对象的向下转型【还原】。
 *      格式：子类名称 对象名 = (子类名称) 父类对象;
 *
 *  类似于基本数据类型中的强制类型转换：eg：int num = (int) 10.0【可行】    int num = (int) 10.6【精度损失】
 * */
public class Demo03MultiMain {
    public static void main(String[] args) {
        /*1. 向上转型*/
        // 向上转型：父类引用指向子类对象
        Demo03Animal cat = new Demo03Cat();
        cat.eat();

        // 调用独有方法，报错。
        // cat.cat();

        /*2.对象的向下转型【还原】*/
        Demo03Cat newcat = (Demo03Cat) cat;
        newcat.cat();

        // 下面为错误的向下转型，本来是一只猫，强制转为狗
        // 编译不会报错，运行出现异常，java.lang.ClassCastException（类转换异常）
        /*Demo03Dog newdog = (Demo03Dog) cat;
        newdog.action();*/
    }
}
